from typing import List

import pytest

from api.calculate.calculator import Calculator


@pytest.fixture(scope="class", autouse=True)
def set_up_class():
    print("set_up_class:开启计算机")
    cal = Calculator()
    yield cal
    print("tear_down_class:关闭计算机")

@pytest.fixture()
def set_up():
    print("set_up:开始用例计算")
    yield
    print("tear_down:结束用例计算")

def pytest_collection_modifyitems(session, config, items: List):
    """
    pytest_collection_modifyitems 是一个pytest的钩子函数，用于在收集所有测试项之后修改这些测试项。

    参数:
    - session: 包含当前测试会话信息的对象。
    - config: 包含当前测试配置信息的对象。
    - items: 包含所有收集到的测试项的列表。

    此函数的目的是遍历所有收集到的测试项，并对每个测试项的名称和节点ID进行编码转换，以确保它们在不同操作系统上都能正确显示。
    """
    for item in items:
        # 打印提示信息，说明当前正在执行收集测试用例的操作
        print("这是收集所有测试用例的方法")

        # 对测试项的名称进行编码转换，以解决在不同操作系统上的兼容性问题
        item.name = item.name.encode('utf-8').decode('unicode-escape')

        # 对测试项的节点ID进行同样的编码转换，确保其在不同平台上都能正确处理
        item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')


